package br.uff.javaavancado.controletransacao;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target (ElementType.METHOD)
@Retention (RetentionPolicy.RUNTIME)
public @interface Transacional 
{}

/*
   Os tres tipos de anotacoes existentes no Java 5 sao:
   
   - Override
   - Deprecated 
   - SuppressWarnings
   
   A  palavra-chave  @interface  diz  ao   compilador  que 
   estamos definindo uma anotação em vez de uma  interface
   normal. 
   
   O  target  de uma  anotacao  representa  o  elemento do 
   programa que esta sendo anotado. Uma anotacao pode  ser
   utilizada  para  anotar  um  package,  uma  classe, uma 
   interface, um metodo, um campo, etc. 
   
   A  retencao de uma  anotacao significa por quanto tempo
   a informacao  contida na  anotacao ser� retida. Algumas 
   anota��es s�o  descartadas  pelo compilador e  aparecem 
   apenas   no  c�digo  fonte.  Outras  s�o  compiladas  e 
   armazenadas  no  arquivo .class.  Dentre estas, algumas 
   s�o ignoradas pela m�quina virtual, e outras s�o  lidas
   pela  m�quina  virtual  quando  a  classe  � carregada. 
   Anota��es que s�o  carregadas pela m�quina  virtual s�o 
   vis�veis em tempo  de execu��o e  podem ser pesquisadas
   pela API de reflex�o Java.  
   
   As tr�s possibilidades de reten��o s�o:
   
   RetentionPolicy.SOURCE
   RetentionPolicy.CLASS
   RetentionPolicy.RUNTIME
   
   Diferentemente     de     Override     e    Deprecated, 
   SuppressWarnings  n�o � uma  anota��o de marca��o.  Ela 
   possui  um  �nico membro  denominado value  cujo tipo � 
   String[].  Os  valores desse  membro s�o os  warnings a 
   serem   suprimidos   pelo   compilador.   A    anota��o 
   SuppressWarnings n�o define quais nomes de warnings s�o
   permitidos:   esta    �   uma   responsabilidade    dos 
   implementadores  dos  compiladores.  Para  o compilador 
   javac os nomes s�o: "unchecked" e "fallthrough".
   
   Exemplo:
   
   @SuppressWarnings(value={"unchecked", "fallthrough"})
   
   
*/